package com.leetBook.Krahets.array;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * 《图解算法与数据结构》数组第 2 题：
 * 待传输文件被切分成多个部分，按照原排列顺序，每部分文件编号均为一个 正整数（至少含有两个文件）。传输要求为：连续文件编号总和为接收方指定数字 target 的所有文件。请返回所有符合该要求的文件传输组合列表。
 *
 * 注意，返回时需遵循以下规则：
 *
 * 每种组合按照文件编号 升序 排列；
 * 不同组合按照第一个文件编号 升序 排列。
 */
public class FileArray {
    public int[][] fileCombination(int target) {
        ArrayList<Integer[]> ints = new ArrayList<>();

        //根据公式：2a + 2b - 1 = target;
        //算出末尾值：b = (target - 2a + 1) / 2;

        for (int i = 1; i < target / 2; i++) {
            if ((((target - 2*i + 1) / 2) & 1) == 0){
                int b = (target - 2*i + 1) / 2;
                Integer[] tmp = new Integer[b - i + 1];

                for (int j = 0; j < tmp.length; j++) {
                    tmp[j] = i + j;
                }

                ints.add(tmp);
            }
        }

        return (int[][])ints.toArray();
    }

    @Test
    public void fun1(){
        System.out.println(Arrays.toString(fileCombination(12)));
        System.out.println(Arrays.toString(fileCombination(18)));
    }
}
